package club.zhcs.capture.biz.auth;

import java.util.List;

import club.zhcs.capture.bean.auth.Permission;
import club.zhcs.capture.bean.auth.Role;
import club.zhcs.capture.bean.auth.User;
import club.zhcs.capture.vo.MenuNode;

import com.dgj.utils.entries.Result;

public interface IShiroUserService {

	/**
	 * 根据用户名查找用户
	 * 
	 * @param userName
	 *            用户名
	 * @return 用户
	 */
	User findByName(String userName);

	/**
	 * 获取用户的全部权限
	 * 
	 * @param id
	 *            用户id
	 * @return 权限列表
	 */
	List<Permission> getAllPermissions(int id);

	/**
	 * 获取用户的全部权限名称
	 * 
	 * @param id
	 *            用户id
	 * @return 权限名称列表
	 */
	List<String> getAllPermissionsInfo(int id);

	/**
	 * 获取用户的全部角色
	 * 
	 * @param id
	 *            用户id
	 * @return 角色列表
	 */
	List<Role> getAllRoles(int id);

	/**
	 * 获取用户的直接权限
	 * 
	 * @param id
	 *            用户id
	 * @return 权限列表
	 */
	List<Permission> getDirectPermissions(int id);

	/**
	 * 获取用户的全部角色
	 * 
	 * @param id
	 *            用户id
	 * @return 角色列表
	 */
	List<Role> getDirectRoles(int id);

	/**
	 * 获取用户的间接权限,比如角色权限,组权限,职位权限等...
	 * 
	 * @param id
	 *            用户id
	 * @return 权限列表
	 */
	List<Permission> getIndirectPermissions(int id);

	/**
	 * 检查权限
	 * 
	 * @param permission
	 * @param id
	 * @return
	 */
	boolean checkPermission(String permission, int id);

	/**
	 * 检查角色
	 * 
	 * @param role
	 * @param id
	 * @return
	 */
	boolean checkRole(String role, int id);

	/**
	 * 获取用户的间接角色,如果职位角色等...
	 * 
	 * @param id
	 *            用户id
	 * @return 角色列表
	 */
	List<Role> getIndirectRoles(int id);

	/**
	 * 获取用户的全部角色名称信息
	 * 
	 * @param id
	 *            用户id
	 * @return 用户的角色名称列表
	 */
	List<String> getRolesInfo(int id);

	/**
	 * 登录
	 * 
	 * @param userName
	 *            用户名
	 * @param password
	 *            密码
	 * @return 登录结果
	 */
	Result login(String userName, String password);

	/**
	 * 获取用户菜单
	 * 
	 * @param id
	 * @return
	 */
	List<MenuNode> getMenu(int id);

	/**
	 * 获取菜单权限
	 * 
	 * @param id
	 * @return
	 */
	List<Permission> getMenuPermissions(int id);

}
